/*************************************************************************
	> File Name: oj-369.cpp
	> Author: Wang Bo
	> Mail: 1276106221@qq.com
	> Created Time: 2021年01月31日 星期日 18时09分47秒
 ************************************************************************/
#include <iostream>
#include <cstring>
using namespace std;
#define MAX_NUM 50000000666LL


using LL = long long;

//dp状态定义
//dp[i][j][k] 在没有限制的情况下，有i位长的数字
//所包含的非魔鬼数的数量
//j = 第i + 1位和 k = 第i + 2位是不是6，是6置为1，否则置为0
int dp[20][2][2], pos[20];
//例如
//dp[i][1][1] 第i位为6，第i-1位为6时，非魔鬼数的数量
//只能从dp[i-1][1][0]转移过来
//dp[i][0][0] 第i位为非6，第i-1位非6，非魔鬼数的数量
//为(dp[i - 1][0][1] + dp[i - 1][0][0]) * 9

LL dfs(int i, int f1, int f2, int limit) {
    if (i == 0) return 1;
    if (!limit && dp[i][f1][f2]) return dp[i][f1][f2];
    int up = limit ? pos[i] : 9;
    LL ret = 0;
    for (int num = 0; num <= up; ++num) {
        if (num == 6 && f1 && f2) continue;
        ret += dfs(i - 1, num == 6, f1, limit && num == up);
    }
    if (limit == 0) dp[i][f1][f2] = ret;
    return ret;
}

LL getNum(LL n) {
    memset(dp, 0, sizeof(dp));
    LL cnt = 0, x = n;
    while (x) {
        pos[++cnt] = x % 10;
        x /= 10;
    } //处理每个位置的digit上限
    return n - dfs(cnt, 0, 0, 1) + 1;
}

LL bs(LL l, LL r, LL x) {
    if (l == r) return l;
    LL mid = (l + r) >> 1;
    if (getNum(mid) < x) return bs(mid + 1, r, x);
    return bs(l, mid, x);
    //如果中点包含的魔鬼数数量少于x
    //调整左指针到mid+1 否则调整右指针到mid
}

void solve() {
    int n;
    cin >> n;
    cout << bs(1, MAX_NUM, n) << endl;
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
